Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

579
Views
Por favor, ¿qué significan (PDOException $e) y PDOException($e->getMessage(), (int)$e->getCode()) en términos más simples?

¿Puede explicar qué significan (PDOException $e) y PDOException($e->getMessage(), (int)$e->getCode()) aquí?

 try { $pdo = new PDO($attr, $user, $pass, $opts); } catch (PDOException $e) { throw new PDOException($e->getMessage(), (int)$e->getCode()); }
over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

El mejor lugar para comenzar es la página del manual de PHP sobre Excepciones .

Las excepciones son un mecanismo de manejo de errores obligatorio : en lugar de establecer un indicador que el código posterior debe verificar activamente, lanzar una excepción aborta todo el código en ejecución hasta que alcanza un bloque catch coincidente. Si no se encuentra ningún bloque catch , se cierra todo el script.

los bloques catch coinciden usando la misma lógica que el operador instanceof : usted nombra una clase o interfaz, y la excepción debe ser la misma clase, una subclase o implementar esa interfaz. Luego le da un nombre a la variable, en su ejemplo $e , pero puede ser cualquier nombre que desee, y PHP asigna la excepción a esa variable y ejecuta el contenido del bloque catch .

Crear una excepción es lo mismo que crear cualquier otro objeto: usa el operador new . Una vez creados, pueden tener propiedades y métodos, incluido un conjunto predeterminado que incluye getMessage() y getCode() , que devuelven valores que se pasaron cuando se construyeron originalmente. Su comportamiento especial ocurre cuando usas la palabra clave throw .

Entonces, el código que has mostrado:

  1. Ejecuta algún código que podría generar una excepción ( new PDO(...) )
  2. Captura cualquier excepción que coincida con una instanceof PDOException
  3. Busca el "mensaje" y el "código" en ese objeto de excepción
  4. Crea un nuevo objeto PDOException
  5. Lanza esa nueva excepción

El resultado por sí solo es bastante inútil; en particular, los pasos 4 y 5 se pueden reemplazar por throw $e , que esencialmente significa "He visto esta excepción, pero decidí que sigue siendo un problema; continúe buscando otra coincidencia bloque de catch ". Eso es ocasionalmente útil si desea hacer algo entre los pasos 3 y 4, como iniciar sesión o limpiar.

Como se señaló en otra respuesta , elimina el backtrace, que de lo contrario podría exponer las credenciales. Eso se manejaría mejor configurando zend.exception_ignore_args=true en su configuración de PHP. PHP 8.2 también tendrá una nueva función que oculta automáticamente ciertos parámetros en las trazas inversas .

over 4 years ago · Santiago Trujillo Report

0

Comparemos la salida de este código con y sin try catch

 $pdo = new PDO('foo', 'username', 'password');

nos dará

Error fatal de PHP: PDOException no detectada: PDO::__construct():
El argumento #1 ($dsn) debe ser un nombre de fuente de datos válido en pdo.php:6
Seguimiento de la pila:
#0 C:\SERVIDOR\www\htdocs\pdo.php(6): PDO->__construct('foo', 'nombre de usuario' , 'contraseña' )
#1 {main} lanzado en pdo.php en la línea 6

observe que el nombre de usuario y la contraseña se pueden ver en el mensaje de error

Ahora intenta atrapar y volver a lanzar

 try { $pdo = new PDO('foo', 'username', 'password'); } catch (PDOException $e) { throw new PDOException($e->getMessage(), (int)$e->getCode()); }

la salida será

 PHP Fatal error: Uncaught PDOException: PDO::__construct(): Argument #1 ($dsn) must be a valid data source name in pdo.php:12 Stack trace: #0 {main} thrown in pdo.php on line 12

como puede ver, no hay nombre de usuario ni contraseña.

Esta es la única razón por la que se emplea un código tan torpe

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!